%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%
%W  Update                      GAP Maintenance
%%
%%
%Y  Copyright (C)  2005,  Lehrstuhl D für Mathematik,  RWTH Aachen,  Germany
%%
%%  This file is intended to list the changes that will be published with
%%  the next update of GAP.
%%  The information is used for producing the announcement of the update,
%%  the additions to `tst/bugfix.tst', and an HTML page that lists the
%%  known bugs and intended new features.
%%
%%  For adding a change, just copy one of the templates below to the end of the
%%  file, and enter the relevant information.
%%
%%  Formal rules for this file, to allow simple parsing by a script:
%%          - lines starting with `%' are comments and are ignored
%%          - lines starting with `!' describe the type of information
%%            in the following lines until the next `!'-line
%%          - each entry must be finished with an `! End' line, otherwise
%%            the order of entries is irrelevant
%%          - the text behind the `!' is case and whitespace insensitive
%%

%%%%%%%%%%%%  short template without comments, below is a longer one  %%%%%%%%
! Date

! Changed by

! Reported by

! Type of Change
Fix: wrong result
Fix: inappropriate error message
Fix: infinite loop
Fix: efficiency issue
Fix: crash
Fix: internal data corruption
New: extended functionality
New: new functionality
New: improved documentation

! Description

! Test Code

! Prefetch

! Changed Files

! End


%%%%%%%%%%%%  Template with explanatory comments    %%%%%%%%%%%%%%%%%%%%%%%%%%
% When the change was checked in, format 'yyyy/mm/dd':
! Date

% Initials should suffice here:
! Changed by

% Only if applicable:
! Reported by

% Choose one or more entries and/or add new ones; but always use either
% the 'Fix:' or the 'New:' prefix
! Type of Change
Fix: wrong result
Fix: inappropriate error message
Fix: infinite loop
Fix: efficiency issue
Fix: internal data corruption
Fix: crash
New: extended functionality
New: new functionality
New: improved documentation

% For the description use (X)HTML (preferred) or plain text:
% For HTML use in particular the following markup:
%     for package names: <span class="pkgname">...</span>
%     for GAP names: <span class="code">...</span>
! Description

% If possible, provide some code in test file format which allows to check
% if a change was applied to an installation. Provide input and output,
% including prompts, exactly as in a GAP session.
! Test Code

% If possible, provide some information about a temporary fix, workaround,
% ..., maybe with a link to some longer description or a file with some
% code. Use (X)HTML here.
! Prefetch

% White space separated list of paths relative to the GAP root directory.
% (This is implicitly contained in the data of the CVS repository, but in
% case of problems after changes it may be convenient to have this
% information here.)
! Changed Files

% Finish your entry with this:
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/03
! Changed by
BH
% Only if applicable:
! Reported by
Roman Schmied
! Type of Change
Fix: wrong result
Fix: crash
Fix: internal data corruption
! Description
The function <mixer manual="Prg Tutorial: InstallValue"><span class="code">
InstallValue</span></mixer> must not be used for
objects in the filter <span class="code">IsFamily</span> because these
objects are compared via <mixer manual="Reference: IsIdenticalObj"><span 
class="code">IsIdenticalObj</span></mixer>.
! Test Code
# gap> fam:= NewFamily( "fam" );;
# gap> DeclareGlobalVariable( "TestFam" );
# gap> InstallValue( TestFam, CollectionsFamily( fam ) );
# #I  please use `BindGlobal' for the family object CollectionsFamily(...), not \
# `InstallValue'
# gap> IsIdenticalObj( TestFam, CollectionsFamily( fam ) );
# false
# gap> MakeReadWriteGlobal( "TestFam" );  UnbindGlobal( "TestFam" );
! Changed Files
lib/ctbl.gd
lib/ctbl.gi
lib/ffe.gd
lib/ffe.gi
lib/list.g
lib/list.gd
lib/variable.g
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/15
! Changed by
SK
! Type of Change
New: new functionality
! Description
A new operation <mixer manual="Reference: PartialFactorization"><span 
class="code">PartialFactorization</span></mixer> has been
added, and a corresponding method for integers has been installed.
This method allows one to specify the amount of work to be spent on looking
for factors.
! Test Code
gap> List([0..5],i->PartialFactorization(7^64-1,i));
[ [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17,
      1868505648951954197516197706132003401892793036353 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353,
      5293217135841230021292344776577913319809612001 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 134818753, 47072139617,
      531968664833, 1567903802863297 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649,
      134818753, 47072139617, 531968664833 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649,
      134818753, 47072139617, 531968664833 ],
  [ 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 5, 5, 17, 353, 1201, 169553, 7699649,
      134818753, 47072139617, 531968664833 ] ]
! Changed Files
lib/integer.gd
lib/integer.gi
doc/build/integers.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/15
! Changed by
AH
! Reported by
Petr Vojtechovsky
! Type of Change
Fix: wrong convention
! Description
The centre of a magma is commonly defined to be the set of elements that
commute and associate with all elements. The previous definition left out
'associate' and caused problems with extending the functionality to
nonassociative loops.
! Test Code
gap> Centre( MagmaByMultiplicationTable( [ [ 2, 2 ], [ 2, 1 ] ] ) );
[  ]
! Changed Files
lib/magma.gd
lib/magma.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/19
! Changed by
SL
! Reported by

! Type of Change
Fix: wrong result

! Description
Inverse of a Zero ffe should give fail, not an error
fixed in 4.dev some time ago

! Test Code

gap> Inverse(0*Z(2));
fail

! Prefetch

! Changed Files
src/finfield.c
! End


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/17
! Changed by
Max
! Reported by
Klaus Lux
! Type of Change
Fix: internal data corruption
! Description
Fixed a bug in <span class="code">APPEND_VEC8BIT</span>, 
which was triggered in the following
situation: Let e be the number of field elements stored in one byte.
If a compressed 8bit-vector v had length not divisible by e and
another compressed 8bit-vector w was appended, such that the sum of
the lengths became divisible by e, then one 0 byte too much was written
which destroyed the <span class="code">TNUM</span> of the next 
<span class="pkgname">GAP</span> object in memory.
! Test Code
# Test code is not possible to provide because the error condition
# cannot be tested in a platform independent way.

In some functions for compressed vectors and matrices, pointers to data were kept during function calls which could trigger garbage collection, resulting
possibly in a corrupted workspace and subsequent wrong results or a crash. This bug mainly
affects GAP versions compiled with GCC 4.0.
% Since even minor changes affect when garbage collections occur, this bug
% is not easily reproducible. The bug seems to occur mostly with GCC 4.0.
% dependent.

! Changed Files
src/vec8bit.c
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/19
! Changed by
JS
! Reported by 
Luc Teirlinck
! Type of Change
Fix: inappropriate error message
! Description
<mixer manual="Reference: PermutationCycle"><span class="code">
PermutationCycle</span></mixer> returned <span class="code">fail</span> if the
cycle was not a contiguous subset of the specified domain.
! Test Code
gap> PermutationCycle((1,2,3,4,5,6)^2,[1..6],1); # returns fail in 4.4.5
(1,3,5)
! Changed Files
lib/oprt.gi
lib/oprt.gd
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/19
! Changed by
JS
! Type of Change
Fix: crash
! Description
<mixer manual="Reference: Assert"><span class="code">Assert</span></mixer>
caused an infinite loop if called
as the first line of a function called from another function. 
! Test Code
gap> f:=function() Assert(0,false); end;; g:=function() f(); end;;
gap> ##  The following should just trigger a normal error, but in 4.4.5 
gap> ##  it will send a few hundred lines before crashing:
gap> # g(); 
! Changed Files
src/stats.c
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/19
! Changed by
JS
! Type of Change
Fix: wrong result
! Description
The functions 
<mixer manual="Reference: EpimorphismSchurCover"><span class="code">
EpimorphismSchurCover</span></mixer> and
<mixer manual="Reference: AbelianInvariantsMultiplier"><span class="code">
AbelianInvariantsMultiplier</span></mixer>
may have produced wrong results without warning.
These problems are fixed.
However, the methods currently used can be expected to be slower than the
ones used before;
we hope to fix this for the next version of
<span class="pkgname">GAP</span>.
! Test Code
gap> g:= SmallGroup( 48, 30 );;
gap> AbelianInvariantsMultiplier( g ); # returned [ 2, 2 ] in 4.4.5
[ 2 ]
! Changed Files
lib/schur.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/22
! Changed by
JS+AH
! Type of Change
Fix: wrong result
! Description
<mixer manual="Reference: DerivedSubgroup"><span class="code">
DerivedSubgroup</span></mixer> and 
<mixer manual="Reference: CommutatorSubgroup"><span class="code">
CommutatorSubgroup</span></mixer> for permutation groups sometimes returned
groups with an incorrect stabilizer chain due to a missing verification
step after a random Schreier Sims.
! Test Code
gap> ##  The mailing lists contain more specific test code that is longer.
gap> ##  The following should never terminate, but does in 4.4.5
gap> # repeat G:=PerfectGroup(IsPermGroup,79200,3); P:=SylowSubgroup(G,11);
gap> # N:=Normalizer(G,P); Q:=N/P; until Size(DerivedSubgroup(Q)) <> 120;
! Changed Files
lib/grpperm.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/23
! Changed by
TB
! Type of Change
Fix: inappropriate error message
Fix: efficiency issue
New: new functionality
New: improved documentation
! Description
Now <mixer manual="Reference: IsElementaryAbelian"><span class="code">
IsElementaryAbelian</span></mixer> and
<mixer manual="Reference: ClassPositionsOfMinimalNormalSubgroups"><span 
class="code">ClassPositionsOfMinimalNormalSubgroups</span></mixer>
are available for ordinary character tables.
Now the operation
<mixer manual="Reference: CharacterTableIsoclinic"><span class="code">
CharacterTableIsoclinic</span></mixer> is an attribute,
and there is another new attribute
<mixer manual="Reference: SourceOfIsoclinicTable"><span class="code">
SourceOfIsoclinicTable</span></mixer> that points back to the
original table;
this is used for computing the Brauer tables of those tables in the character
table library that are computed using
<span class="code">CharacterTableIsoclinic</span>.
Now <mixer manual="Reference: ClassPositionsOfDerivedSubgroup"><span 
class="code">ClassPositionsOfDerivedSubgroup</span></mixer> avoids calling
<mixer manual="Reference: Irr"><span class="code">Irr</span></mixer>,
since <mixer manual="Reference: LinearCharacters"><span class="code">
LinearCharacters</span></mixer> is sufficient.
Now <mixer manual="Reference: ClassPositionsOfElementaryAbelianSeries"><span 
class="code">ClassPositionsOfElementaryAbelianSeries</span></mixer>
works also for the table of the trivial group.
Restrictions of character objects know that they are characters.
<br/>

A few formulations in the documentation concerning character tables have
been improved slightly.
! Test Code
gap> tbl:= CharacterTable( ElementaryAbelianGroup( 4 ) );;
gap> IsElementaryAbelian( tbl );                         
true
gap> ClassPositionsOfMinimalNormalSubgroups( tbl );
[ [ 1, 2 ], [ 1, 3 ], [ 1, 4 ] ]
gap> if LoadPackage ("ctbllib") <> fail then
>      tbl:= CharacterTableIsoclinic( CharacterTable( "2.A5.2" ) );
>      if tbl mod 3 = fail then
>        Error( CharacterTable( "Isoclinic(2.A5.2)" ), " mod 3" );
>      fi;
>      SourceOfIsoclinicTable( tbl );
>    fi;
gap> tbl:= CharacterTable( Group( () ) );;
gap> ClassPositionsOfElementaryAbelianSeries( tbl );;
! Changed Files
lib/ctbl.gd
lib/ctbl.gi
lib/ctblauto.gd
lib/ctblfuns.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/23
! Changed by
TB
! Type of Change
Fix: efficiency issue
! Description
Up to now, <mixer manual="Reference: CharacterDegrees"><span class="code">
CharacterDegrees</span></mixer> ignored the attribute
<mixer manual="Reference: Irr"><span class="code">Irr</span></mixer>
if the argument was a group that knew that it was solvable.
! Test Code
gap> g:= SymmetricGroup( 4 );; IsSolvable( g );; Irr( g );;
gap> meth:= ApplicableMethod( CharacterDegrees, [ g, 0 ] );;
gap> meth( g, 0 ); 
"TRY_NEXT_METHOD"
! Changed Files
lib/ctblsolv.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/23
! Changed by
TB
! Type of Change
Fix: inappropriate error message
! Description
The function <span class="code">Debug</span> now prints a meaningful message
if the user tries to debug an operation.
Also, the help file for <span class="code">vi</span> is now available in
the case of several <span class="pkgname">GAP</span> root directories.
! Test Code
gap> RereadLib( "debug.g" );
gap> Debug( Size );
Usage: Debug( <func>[, <name>] );
       where <func> is a function but not an operation,
       and   <name> is a string.
! Changed Files
lib/debug.g
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/23
! Changed by
FL
! Reported by
Stefan Kohl
! Type of Change
Fix: internal data corruption
! Description
It is no longer possible to create corrupt objects via ranges of length
&gt;2^28, resp. &gt;2^60 (depending on the architecture). The limitation
concerning the arguments of ranges is documented.
! Test Code
gap> a := 2^(8*GAPInfo.BytesPerVariable-4)-1;;
gap> Unbind( x );
gap> x := [-a..a];;
Range: the length of a range must be less than 2^28
gap> IsBound(x);
false
! Changed Files
src/exprs.c
src/intrprtr.c
doc/build/lists.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/19
! Changed by
SL
! Type of Change
Fix: inappropriate error message
! Description
Now <mixer manual="Reference: Inverse"><span class="code">Inverse</span></mixer>
correctly returns <span class="code">fail</span> for zeros in finite fields
(and does no longer enter a break loop).
! Test Code
gap> Inverse(0*Z(3));
fail
! Changed Files
src/finfield.c
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/24
! Changed by
SL, FL
! Type of Change
New: new and extended functionality
! Description
New operation 
<mixer manual="Reference: Remove"><span class="code">Remove</span></mixer>
and extended functionality of
<mixer manual="Reference: Add"><span class="code">Add</span></mixer> with
an optional argument giving the position of the insertion. They are based
on an efficient kernel function 
<mixer manual="Reference: COPY_LIST_ENTRIES">
<span class="code">COPY_LIST_ENTRIES</span></mixer>.
! Test Code
gap> l:=[1,2];;
gap> Remove(l,1); l;
1
[ 2 ]
gap> Add(l, 100, 1); l;
[ 100, 2 ]
! Changed Files
src/listfunc.c
lib/list.gd
lib/list.gi
lib/alglie.gi
lib/algrep.gi
lib/claspcgs.gi
lib/stbc.gi
doc/build/lists.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/25
! Changed by
JS
! Type of Change
Fix: wrong result
! Description
<mixer manual="Reference: PrimePGroup"><span class="code">
PrimePGroup</span></mixer> is defined to return <span class="code">fail</span> 
for trivial groups, but if the group was constructed as a 
factor or subgroup of a known p-group, the value of p
was retained.
! Test Code
gap> G := Group((1,2));; PrimePGroup(G);
2
gap> PrimePGroup(Subgroup(G,[])); # returns 2 in 4.4.5
fail
! Changed Files
lib/grp.gd
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/25
! Changed by
JS
! Type of Change
Fix: efficiency issue
! Description
Up to now, <mixer manual="Reference: IsPGroup"><span class="code">
IsPGroup</span></mixer> has rarely been set. Now many basic operations
such as <mixer manual="Reference: SylowSubgroup"><span class="code">
SylowSubgroupOp</span></mixer> set this attribute on the returned result.
! Test Code
gap> HasIsPGroup( SylowSubgroup( SymmetricGroup( 5 ), 5 ) ); # false in 4.4.5
true
! Changed Files
grp/basicpcg.gi
lib/gpprmsya.gi
lib/grp.gd
lib/grp.gi
lib/grppcatr.gi
lib/grpperm.gi
lib/grpprmcs.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/26
! Changed by
Max
! Type of Change
Fix: design improvement
! Description
Make "<span class="code">MutableCopyMat</span>" an operation and install 
the former function which does call <mixer manual="Reference: List">
<span class="code">List</span></mixer> with
<mixer manual="Reference: ShallowCopy"><span class="code">
ShallowCopy</span></mixer> the default method for lists. Also
use this in a few appropriate places.
! Test Code
gap> IsOperation(MutableCopyMat);
true
! Changed Files
lib/matrix.gd
lib/matrix.gi
doc/build/matrix.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/26
! Changed by
BH,FL
! Type of Change
Fix: page references in manuals
! Description
Fixed wrong page references in manual indices.
! Changed Files
doc/gapmacro.tex
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/29
! Changed by
TB
! Type of Change
New: extended functionality
! Description
In test files that are read with <mixer manual="Reference: ReadTest">
<span class="code">ReadTest</span></mixer>,
the assertion level is set to 2 between <span class="code">START_TEST</span>
and <span class="code">STOP_TEST</span>.
This may result in runtimes for the tests that are substantially longer
than the usual runtimes with default assertion level 0.
In particular this is the reason why some of the standard test files require
more time in <span class="pkgname">GAP</span> 4.4.6 than in
<span class="pkgname">GAP</span> 4.4.5.
! Changed Files
lib/profile.g
lib/grppcnrm.gi
lib/meataxe.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/08/29
! Changed by
TB
! Reported by
Burkhard Höfling
! Type of Change
Fix: wrong result
! Description
The functions <mixer manual="Reference: TestPackageAvailability"><span 
class="code">TestPackageAvailability</span></mixer>
and <mixer manual="Reference: LoadPackage"><span class="code">
LoadPackage</span></mixer> did not work correctly when one asked for a 
particular version of the package, via a version number starting with
the character <span class="code">=</span>, in the sense that a version
with a larger version number was loaded if it was available.
! Test Code
gap> LoadPackage( "ctbllib", "=0.0" );
fail
! Changed Files
lib/package.g
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/07
! Changed by
TB
! Type of Change
Fix: efficiency issue
! Description
The matrices of invariant forms stored as values of the attributes
<mixer manual="Reference: InvariantBilinearForm"><span
class="code">InvariantBilinearForm</span></mixer>,
<mixer manual="Reference: InvariantQuadraticForm"><span
class="code">InvariantQuadraticForm</span></mixer>, and
<mixer manual="Reference: InvariantSesquilinearForm"><span
class="code">InvariantSesquilinearForm</span></mixer>,
for matrix groups over finite fields,
are now in the (compressed) format returned by
<mixer manual="Reference: ImmutableMatrix"><span
class="code">ImmutableMatrix</span></mixer>.
! Test Code
gap> Is8BitMatrixRep( InvariantQuadraticForm( SO( 7, 3 ) ).matrix );
true
gap> Is8BitMatrixRep( InvariantBilinearForm( Sp( 4, 4 ) ).matrix );
true
gap> Is8BitMatrixRep( InvariantSesquilinearForm( SU( 4, 2 ) ).matrix );
true
! Changed Files
grp/classic.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/13
! Changed by
AH
! Type of Change
Fix: error message
! Description
`String' now returns an immutable string, copy before changing.
! Test Code
gap> r:=PolynomialRing(Rationals,3);; eo:=EliminationOrdering([2],[3,1]);;
! Changed Files
grp/groebner.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/20
! Changed by
SK
! Type of Change
Fix: wrong result
! Description
A potential problem in the generic method for the undocumented operation
<span class="code">DirectFactorsOfGroup</span>:
It was silently assumed that
<mixer manual="Reference: NormalSubgroups">
<span class="code">NormalSubgroups</span></mixer>
delivers the trivial subgroup as first and
the whole group as last entry of the resulting list.
! Test Code
gap> # None as the library methods for `NormalSubgroups' apparently obey
gap> # the `rule' that the trivial subgroup appears in the first and the
gap> # whole group appears in the last position.
! Changed Files
lib/grpnames.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/27
! Changed by
BH
! Type of Change
Fix: wrong result
Fix: crash
Fix: internal data corruption
! Description
The code for sublists of compressed vectors created by vec{range} may write 
one byte beyond the space allocated for the new vector, overwriting part of the next
object in the workspace. Thanks to Jack Schmidt for narrowing down the problem.
% The effect of the bug depends on the precise arrangement of objects in the 
% workspace and cannot, therefore, be reproduced easily. There is code by Jack 
% Schmidt which occasionally produces the bug but involves a large matrix occupying 
% 9 M of disk space - probably not what we want in a test file.
! Changed Files
src/vec8bit.c
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/09/28
! Changed by
BH
! Type of Change
New: extended functionality
! Description
So far, the UNIX installation didn't result in a correct gap.sh if the installation
path contained space characters. Now it should handle this case correctly, as well as
other unusual characters in path names (except for double quotes).
% ! Test Code
% The only possible test would be to install GAP in a path containing space characters.
! Changed Files
gap.shi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/05
! Changed by
SL and MN
! Reported by
MN
! Type of Change
Fix: efficiency issue
! Description
Permutation ^0 and permutation ^1 were not handled with special code in
the kernel, which made them very slow for big permutations. 
! Test Code
gap> p := PermList(Concatenation([2..10000],[1]));;
gap> for i in [1..10000] do a := p^0; od; time1 := time;;    
gap> for i in [1..10000] do a := OneOp(p); od; time2 := time;;
gap> if time1 <= 3 * time2 then Print("Fix worked\n"); fi;      
Fix worked
! Changed Files
src/permutat.c
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/14
! Changed by
BH
! Type of Change
Fix: efficiency issue
New: extended functionality
! Description
Added code to cache induced pcgs for an arbitrary parent pcgs. (This code
was formerly part of the CRISP package.)
! Test Code
gap> IsBoundGlobal ("ComputedInducedPcgses");
true
! Changed Files
lib/grppc.gd
lib/grppc.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/14
! Changed by
BH
! Reported by
Roman Schmied
! Type of Change
Fix: inappropriate error message
Fix: efficiency issue
New: extended functionality
! Description
This fix consists of numerous changes to improve support for 
direct products, including:
- new methods for PcgsElementaryAbelianSeries, PcgsChiefSeries,
ExponentsOfPcElement, DepthOfPcElement for direct products
- fixed EnumeratorOfPcgs to test for membership first
- new methods for membership test in groups which have an induced pcgs
- added GroupOfPcgs attribute to pcgs in various methods
- fixed declarations of PcgsElementaryAbelianSeries, PcgsChiefSeries
(the declared argument was a pcgs, not a group)
! Test Code
gap> LoadPackage ("crisp", "1.2.1", false);
true
gap> G := DirectProduct( CyclicGroup(2) , CyclicGroup(3) ,  
> SymmetricGroup(4) );;
gap> AllInvariantSubgroupsWithQProperty (G, G, 
> ReturnTrue, ReturnTrue, rec());;
gap> (1, 5) in EnumeratorByPcgs ( Pcgs( SymmetricGroup (4) ) );
false
! Changed Files
lib/pcgscomp.gi
lib/pcgsspec.gi
lib/pcgsperm.gi
lib/pcgs.gd
lib/pcgs.gi
lib/gprd.gd
lib/grppc.gi
lib/gprd.gi
lib/tuples.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/26
! Changed by
JS
! Reported by
Jan Draisma
! Type of Change
Fix: infinite loop
! Description
Corrected a term ordering problem encountered by the basis construction
code for finite dimensional vector spaces of multivariate rational functions.
! Test Code
gap> PolynomialByExtRep(FamilyObj(X(Rationals)),[[1,1],1,[2,1],1]); # x_2+x_1 in 4.4.6
x_1+x_2
! Changed Files
lib/ratfun.gd
lib/ratfun.gi
lib/ratfun1.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/28
! Changed by
TB
! Reported by
Jack Schmidt
! Type of Change
Fix: wrong result
! Description
An <mixer manual="Reference: Arithmetic Operations for Class Functions">
<span class="code">InverseOp</span></mixer> method for a class function
that knows to be a character and that has a zero value
erroneously did not return <span class="code">fail</span>.
! Test Code
gap> fail in List( Irr( SymmetricGroup( 3 ) ), Inverse );
true
! Changed Files
lib/ctblfuns.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/28
! Changed by
TB
! Type of Change
Fix: wrong result
! Description
The <mixer manual="Reference: Arithmetic Operations for Class Functions">
<span class="code">Order</span></mixer> method for a class function
erroneously returned a finite number if one of the values
is nonreal, not a cyclotomic integer, and has norm 1.
(I think this is a pathological situation, nevertheless the code was wrong.)
! Test Code
gap> Order( ClassFunction( CyclicGroup( 1 ), [ (1-EI(5))/ER(6) ] ) );
infinity
! Changed Files
lib/ctblfuns.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/28
! Changed by
TB
! Reported by
Heiko Dietrich
! Type of Change
Fix: inappropriate error message
! Description
When the factor of a finite dimensional group ring by an ideal was formed,
a method intended for free algebras modulo relations was used,
and the returned factor algebra could be used for (almost) nothing.
! Test Code
gap> rg:= GroupRing( GF(2), SymmetricGroup( 3 ) );;
gap> i:= Ideal( rg, [ Sum( GeneratorsOfAlgebra( rg ){ [ 1, 2 ] } ) ] );;
gap> Dimension( rg / i );;
! Changed Files
lib/algfp.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/10/29
! Changed by
TB
! Type of Change
Fix: inappropriate error message
New: extended functionality
! Description
Up to now, <mixer manual="Reference: PowerMap"><span class="code">
PowerMap</span></mixer> ran into an error
when one asked for the n-th power map where n was not a small integer.
This happened in some <span class="pkgname">GAP</span> library functions
if the exponent of the character table in question was not a small integer.
! Test Code
gap> LoadPackage( "ctbllib" );
true
gap> t:= CharacterTable( "S12(2)" );;  p:= PrevPrimeInt( Exponent( t ) );;
gap> IsSmallIntRep( p );
false
gap> PowerMap( t, p );;
! Changed Files
lib/ctblmaps.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/22
! Changed by
TB
! Reported by
Heiko Dietrich
! Type of Change
Fix: inappropriate error message
! Description
Up to now, the test whether a finite field elements is contained in a group
of finite field elements ran into an error if the element was not in the
field generated by the group elements.
! Test Code
gap> Z(4) in Group( Z(2) );;
! Changed Files
lib/finfield.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/25
! Changed by
JS
! Reported by
JS
! Type of Change
Fix: wrong result
Fix: efficiency issue
! Description
Two missing perfect groups were added, and the permutation degree lowered on the
perfect groups with the largest degrees.
! Test Code
gap> NrPerfectLibraryGroups(450000);
3
gap> NrPerfectLibraryGroups(962280);
1
gap> NrMovedPoints(PerfectGroup(IsPermGroup,129024,2));
288
gap> NrMovedPoints(PerfectGroup(IsPermGroup,258048,2));
576
gap> NrMovedPoints(PerfectGroup(IsPermGroup,516096,1));
400
! Changed Files
grp/perf0.grp
grp/perf7.grp
grp/perf9.grp
grp/perf10.grp
grp/perf12.grp
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/28
! Changed by
FL
! Type of Change
Fix: unexpected result
! Description
Conjugacy classes of natural (special) linear groups are now always returned
with trivial class first.
! Test Code
gap> ConjugacyClasses(SL(2,3))[1];
[ [ Z(3)^0, 0*Z(3) ], [ 0*Z(3), Z(3)^0 ] ]^G
! Changed Files
lib/grpffe.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/28
! Changed by
TB
! Reported by
JS
! Type of Change
Fix: wrong result
! Description
When a character table was displayed with
<mixer manual="Reference: Printing Character Tables">
<span class="code">Display</span></mixer>,
the centralizer order shown for the first class in the shown set of classes
was not correct if the centralizer order of this class did not involve
all prime divisors of the group.
! Test Code
gap> LoadPackage( "ctbllib" );
true
gap> Display( CharacterTable( "s4" ), rec( classes:= [ 3 ] ) );
s4

     2  .
     3  1

       3a
    2P 3a
    3P 1a

X.1     1
X.2     1
X.3    -1
X.4     .
X.5     .
! Changed Files
lib/ctbl.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/29
! Changed by
TB
! Type of Change
Fix: internal data corruption (or perhaps something weaker ...)
! Description
Up to now, it could happen that <mixer manual="Reference: CheckFixedPoints">
<span class="code">CheckFixedPoints</span></mixer> reduced an entry in its
second argument to a list containing only one integer
but did not replace the list by that integer;
according to the conventions, this replacement should be done.
! Test Code
gap> l:= [ [ 1, 2 ] ];;  CheckFixedPoints( [ 1 ], l, [ 1, 1 ] );;  l;
[ 1 ]
! Changed Files
lib/ctblmaps.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/29
! Changed by
TB
! Reported by
Laurent Bartholdi
! Type of Change
Fix: wrong result (a result where one should get an error message)
! Description
The first argument of the function <mixer manual="Reference: VectorSpace">
<span class="code">VectorSpace</span></mixer> must be a field.
This is checked from now on.
! Test Code
gap> IsIdenticalObj( VectorSpace, FreeLeftModule );
false
! Changed Files
lib/vspc.gd
lib/vspc.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/11/29
! Changed by
TB
! Reported by
Alexander Konovalov
! Type of Change
Fix: wrong result
! Description
Up to now, it was possible to create a group object from a semigroup of
cyclotomics using <mixer manual="Reference: AsGroup">
<span class="code">AsGroup</span></mixer>,
although groups of cyclotomics are not admissible.
! Test Code
gap> AsGroup( [ 1, -1 ] );
#I  no groups of cyclotomics allowed because of incompatible ^
fail
! Changed Files
lib/cyclotom.gi
lib/grp.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/08
! Changed by
TB
! Type of Change
New: extended functionality
! Description
The <mixer manual="Reference: Irr"><span class="code">Irr</span></mixer>
method for p-solvable p-modular Brauer tables now keeps the order of the
irreducibles in the ordinary table.
! Test Code
gap> List( Filtered( Irr( CharacterTable( "Sz(8).3" ) mod 3 ),            
>                    x -> x[1] = 14 ), ValuesOfClassFunction );        
[ [ 14, -2, 2*E(4), -2*E(4), -1, 0, 1 ], 
  [ 14, -2, -2*E(4), 2*E(4), -1, 0, 1 ] ]
! Changed Files
lib/ctbl.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/08
! Changed by
TB
! Type of Change
New: extended functionality
! Description
The <mixer manual="Reference: Display"><span class="code">Display</span>
</mixer> functionality for character tables has been extended as follows:
Optionally, power maps and centralizer orders can be shown in a format
similar to that used in the ATLAS,
and the options handling has been changed to a hierarchical one,
in order to admit more flexible overloading.
! Test Code
gap> Display( CharacterTable( "A5" ),                                     
>     rec( powermap:= "ATLAS", centralizers:= "ATLAS", chars:= false ) );   
A5

    60  4  3  5  5

 p      A  A  A  A
 p'     A  A  A  A
    1A 2A 3A 5A B*

! Changed Files
lib/ctbl.gd
lib/ctbl.gi
doc/build/ctbl.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/08
! Changed by
TB, Michael Hartley (implementation of a prototype)
! Reported by
Michael Hartley <Michael.Hartley@nottingham.edu.my>
! Type of Change
New: extended functionality
! Description
For the function <mixer manual="Reference: LowIndexSubgroupsFpGroup">
<span class="code">LowIndexSubgroupsFpGroup</span></mixer>,
there is now an <mixer manual="Reference: Iterators">iterator</mixer> variant
<mixer manual="Reference: LowIndexSubgroupsFpGroupIterator">
<span class="code">LowIndexSubgroupsFpGroupIterator</span></mixer>.
! Test Code
gap> LowIndexSubgroupsFpGroupIterator;;
! Changed Files
doc/build/grpfp.msk
lib/grpfp.gd
lib/grpfp.gi
tst/grpfp.tst
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/21
! Changed by
BH
! Reported by
Jack Schmidt
! Type of Change
Fix: wrong result
New: extended functionality
New: improved documentation
! Description
The documentation of `CharacteristicPolynomial(F,mat)' was ambiguous if
$`FieldOfMatrix'(<mat>) \leq <F> < `DefaultFieldOfMatrix'(<mat>)$. In particular, the 
result was representation dependent. This was fixed by introducing a second
field which specifies the vector space which <mat> acts upon. 
! Test Code
gap> ApplicableMethod (CharacteristicPolynomial, [GF(2), GF(4), [[Z(2)]], 1])=fail;
false
! Changed Files
lib/algfld.gi
lib/alglie.gi
lib/algmat.gi
lib/matrix.gd
lib/matrix.gi
! End


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/22
! Changed by
Robert F. Morse
! Reported by
Nelson Silva and Joao Araújo
! Type of Change
Fix: wrong result
! Description
AssociatedReesMatrixSemigroupOfDClass produced an incorrect 
sandwich matrix for the semigroup created. This matrix is an
attribute set when creating the Rees matrix semigroup but is 
not used for creating the semigroup. A incorrect result was returned
when SandwichMatrix is called.
! Test Code
gap> t:=Transformation([1,2,3,3]);;
gap> s:=FullTransformationSemigroup(4);;
gap> ld:=GreensDClassOfElement(FullTransformationSemigroup(4),
> Transformation([1,2,3,3]));;
gap> rs:=AssociatedReesMatrixSemigroupOfDClass(ld);;
gap> SandwichMatrixOfReesZeroMatrixSemigroup(rs)[3][5]=(1,2)(3,4)(5,6);
true
! Changed Files
lib/reesmat.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/22
! Changed by
Robert F. Morse
! Type of Change
New: new functionality
New: extended functionality
! Description
Functionality for creating free products of any list of groups for which 
a finite presentation can be determined had been added. This
function returns a finitely presented group. This functionality includes
the Embedding operation.

As an application of this new code a specialized direct product 
operation has been added for finitely presented groups which 
returns a finitely presented group. This application includes 
Embedding and Projection functionality.
! Test code
gap> g := Image(IsomorphismFpGroup(SmallGroup(8,3)));;
gap> h := Image(IsomorphismFpGroup(SmallGroup(120,5)));;
gap> fp := FreeProduct(g,h);;
gap> IsFpGroup(fp);
true
gap> emb := Embedding(fp,1);;
gap> IsMapping(emb);
true
gap> dp := DirectProduct(g,h);;
gap> IsFpGroup(dp);
true
gap> IdGroup(dp);
[ 960, 5746 ]
gap> IdGroup(Image(Projection(dp,2)));
[ 120, 5 ]
gap> IdGroup(Image(Embedding(dp,1)));            
[ 8, 3 ]
! Changed Files
lib/gprd.gd
lib/gprd.gi
lib/grpfp.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/23
! Changed by
Robert F. Morse
! Type of Change
Fix: wrong result
New: improved documentation
! Description
The literal "/compiled/" was given an incorrect length. The 
kernel was then unable to find compiled library code as the search
path was incorrect. Also the documentation example had a path error in 
invoking the gac compiler.
! Changed Files
src/system.c
doc/build/run.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2005/12/28
! Changed by
FL
! Type of Change
New: extended functionality
! Description
New Conway polynomials provided by John Bray and Kate Minola.
! Test Code
gap> IsCheapConwayPolynomial(2,114);
true
! Changed Files
lib/polyconw.gi
lib/conwdat1.g
lib/conwdat2.g
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/01/11
! Changed by
MC
! Reported by
MC
! Type of Change
Fix: inappropriate error message
! Description
Before this, PrintFormattingStatus was defined only for text streams.
The functions PrintTo and AppendTo ask PrintFormattingStatus. The
input/output streams don't lie in IsOutputTextStream. All this caused
that it was not possible to use PrintTo and AppendTo with input/output
streams. Now PrintFormattingStatus is defined also for non-text streams
(and it is false).
! Test Code
gap> d := DirectoryCurrent();;
gap> f := Filename(DirectoriesSystemPrograms(), "rev");;
gap> s := InputOutputLocalProcess(d,f,[]);;
gap> PrintFormattingStatus(s);
false
gap> SetPrintFormattingStatus(s,false);
gap> AppendTo(s,"The cat sat on the mat\n");
gap> Print(ReadLine(s));
tam eht no tas tac ehT
gap> CloseStream(s);
! Changed Files
lib/streams.gd
lib/streams.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/01/18
! Changed by
AH
! Reported by
Laurent Bartholdi
! Type of Change
Fix: wrong result
! Description
Generic wreath products may have the twisting group act intransitively
! Test Code
gap> G:=WreathProduct(CyclicGroup(3),Group((1,2,3),(4,5,6)));;
gap> Assert(0,Size(Group(GeneratorsOfGroup(G)))=6561);
! Changed Files
lib/gprd.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/01/25
! Changed by
TB
! Reported by
Klaus Lux
! Type of Change
Fix: inappropriate error message
! Description
The function <span class="code">Basis</span> did not return a value
when it was called with the argument <span class="code">Rationals</span>.
! Test Code
gap> Basis( Rationals );;
! Changed Files
lib/rational.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/14
! Changed by
SK
! Reported by
Nilo de Roock
! Type of Change
Fix: inappropriate error message
! Description
For certain matrix groups, the function
<span class="code">StructureDescription</span> raised an error message.
The reason for this was that a trivial method for
<span class="code">IsGeneralLinearGroup</span> for matrix groups in
<span class="code">lib/grpmat.gi</span> which is ranked higher than
the nontrivial method for generic groups in
<span class="code">lib/grpnames.gi</span> called the operation
<span class="code">IsNaturalGL</span>, for which currently no nontrivial
method is available.
! Test Code
gap> testG :=
>    function ( a, b )
>      local  M1;
>       M1 := [ [ [      0, -E(a)^-1 ], [ -E(a),       0 ] ],
>               [ [      0,       -1 ], [     1,       0 ] ],
>               [ [ E(4*b),        0 ], [     0, -E(4*b) ] ],
>               [ [     -1,        0 ], [     0,      -1 ] ]];
>       return (Group(M1));
>    end;;
gap> StructureDescription(testG(8,2));
"(C8 x C4) : C2"
gap> StructureDescription(testG(8,3));
"C3 x QD16"
gap> StructureDescription(testG(8,4));
"(C16 x C4) : C2"
! Changed Files
lib/grpmat.gi
lib/grpnames.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/2/20
! Changed by
AH
! Reported by
Andrew Johnson
! Type of Change
Fix: inappropriate error message
! Description
Conjugacy test for subgroups tests for EARNS conjugacy. Catch this if the
second group has no EARNS.
! Test Code
gap> group1 := Group([ (1,3)(2,5)(4,7)(6,8), (1,4)(2,6)(3,7)(5,8),
> (1,5)(2,3)(4,8)(6,7), (2,3,4,5,7,8,6), (3,4,7)(5,6,8) ]);;
gap> group2 := Group([ (1,3,4,7,2,6,8), (1,8,7,5,3,6,2) ]);;
gap> group3 := SymmetricGroup([1..8]);;
gap> RepresentativeAction(group3,group1,group2);
fail
! Changed Files
lib/stbcbckt.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/20
! Changed by
TB
! Type of Change
New: extended functionality
! Description
The <mixer manual="Reference: ReadTest"><span class="code">ReadTest</span>
</mixer> methods for strings (filenames) and streams now automatically set
the screen width (see <mixer manual="Reference: SizeScreen">
<span class="code">SizeScreen</span></mixer> to 80 before the tests,
and reset it afterwards.
! Changed Files
lib/files.gi
lib/streams.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/26
! Changed by
Max
! Type of Change
New: new functionality
! Description
Some new functions for straight line programs.
! Changed Files
lib/straight.gd
lib/straight.gi
doc/build/wordass.msk
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/26
! Changed by
Max
! Type of Change
New: new functionality
! Description
New code to have group elements with memory. That is, they store
automatically how they were derived from some given set of generators.
Note that there is not yet documentation, but some packages already
use it.
! Changed Files
lib/memory.gd
lib/memory.gi
lib/read3.g
lib/read7.g
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/26
! Changed by
Max
! Type of Change
New: new functionality
! Description
New code to handle matrices and vectors in a way that they do not
change their representation in a generic way.
! Changed Files
lib/matrix.gd
lib/matrix.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/02/27
! Changed by
AH
! Reported by
Mathieu Dutour
! Type of Change
Fix: inappropriate error message
! Description
missing action specification when acting on sets of length 1 reduced to
point action.
! Test Code
gap> RepresentativeAction(Group(()), [1], [2], OnSets);;
! Changed Files
lib/oprtperm.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/03/02
! Changed by
AH
! Type of Change
Fix: wrong result
! Description
Arithmetic bug in polynomial reduction
! Test Code
gap> x:=X(Rationals,"x");;
gap> y:=X(Rationals,"y");;
gap> a:=X(Rationals,"a");;
gap> c:=X(Rationals,"c");;
gap> s:=X(Rationals,"s");;
gap> L:=[(a+c)*s-x,(a+c)*c-y,s^2+c^2-1];;
gap> ReducedGroebnerBasis(L,MonomialLexOrdering([x,y,a,c,s]));
[ c^2+s^2-1, -a*c+s^2+y-1, -a*s-c*s+x ]
gap> ReducedGroebnerBasis(L,MonomialLexOrdering([c,s,x,y,a]));
[ x^4+2*x^2*y^2-x^2*a^2+y^4-y^2*a^2-2*x^2*y-2*y^3+y^2, 
  -x^3-x*y^2+x*a^2+y*a*s+x*y, x^2*y+x*a*s+y^3-y*a^2-x^2-2*y^2+y, 
  x^2*s+y^2*s-x*a-y*s, -x^2-y^2+a^2+s^2+2*y-1, -x^2-y^2+a^2+a*c+y, 
  x*s+y*c-a-c, x*c-y*s, a*s+c*s-x, x^2+y^2-a^2+c^2-2*y ]
! Changed Files
lib/groebner.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/03/03
! Changed by
FL
! Reported by
Marco Costantini
! Type of Change
Fix: inappropriate raise of error
! Description
Now <span class="code">WriteByte</span> allows to write zero characters to
all streams.
! Test Code
gap> s := "";; str := OutputTextString(s, false);;
gap> for i in [0..255] do WriteByte(str, i); od;
gap> CloseStream(str);
gap> s = List([0..255], CHAR_INT);
true
! Changed Files
lib/streams.gd
lib/streams.gi
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/03/06
! Changed by
Max
! Type of Change
New: extended functionality
! Description
A few more checks are done during the <span class="code">configure</span>
phase of compiling for future use of some I/O functions of the C-library
in a package. Also the path to the GAP binaries for the GAP compiler is 
now handled via autoconf. Finally, now <span class="code">autoconf</span>
version 2.59 is used.
! Changed Files
cnf/config.hin
cnf/configure.in
cnf/configure.out
cnf/config.sub
cnf/config.guess
cnf/Makefile
cnf/gac.in
! End


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/03/08
! Changed by
SL
! Type of Change
New: extended functionality
! Description
GAP can now handle any finite field for which the Conway polynomial is known or
can be computed. 
! Test Code
gap> Z(3,30);
z
! Changed Files
src/ffeconway.gi 
many minor changes across the library and kernel
! End

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
! Date
2006/03/13
! Changed by
JDM
! Type of Change
extended functionality and extended.
! Description
New code to improve functionality of computation with semigroups in GAP. Also added some functionality.
! Changed Files
tst/bugfix.tst 		
doc/build/trans.msk 		
lib/semigrp.gi 
lib/semitrans.gi
lib/semirel.gd 
lib/semirel.gi 
lib/trans.gd 
lib/trans.gi 
! End
